<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>闭包的简介</title>
    <script>
        /* 
            创建一个函数，第一次调用打印1，第二次调用打印2，第三次调用打印3，一次类推。

            闭包：
                闭包就是能访问到外部函数作用域中变量的函数。

            什么时候使用闭包？
                当我们需要隐藏一些不希望别人访问的内容时，我们就可以使用闭包。
            
            构成闭包的要件
                1.首先要有函数的嵌套
                2.内部函数要引用外部函数中的变量。
                3.内部函数要做为返回值返回。

        */

        //  将计数器放在外部，变量容易被修改，安全性太低
        let number=0
        function fn(){
                number++
                console.log(number)
        }
        fn()
        

        function outer(){
            let number=0    // number在函数作用域内不会被外部访问
            
            return ()=>{    //  这个函数就是闭包
                number++;
                console.log(number)
            }
        }
        const newFn=outer() //这里的newFn就是执行outer函数的返回值
        console.log(newFn)

        newFn() //1
        newFn() //2
        newFn() //3
    </script>
</head>

<body>

</body>

</html>